package cn.cdeden.resource.unified.service;

import cn.cdeden.common.core.utils.page.TableDataInfo;
import cn.cdeden.resource.api.domain.RemoteFile;
import cn.cdeden.resource.api.domain.RemoteFilesDownload;
import cn.cdeden.resource.domain.vo.*;
import cn.cdeden.resource.unified.domain.dto.FilesEditingDto;
import cn.cdeden.resource.unified.domain.dto.FilesUploadDto;
import cn.cdeden.resource.unified.domain.dto.OnlinePreviewInfoDto;
import cn.cdeden.resource.unified.domain.dto.SliceFileUploadDto;
import cn.cdeden.resource.unified.domain.vo.FilePreviewVo;
import cn.cdeden.resource.unified.enums.EditorEnums;
import cn.cdeden.system.api.model.LoginUser;
import cn.cdeden.common.mybatis.core.page.PageQuery;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotNull;
import org.springframework.transaction.annotation.Transactional;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @ProjectName : KnowCore01
 * @Package : cn.cdeden.resource.unified.service
 * @ClassName : UploadFileService
 * @Author : Yu.
 * @Description : // TODO
 * @Date : 2024/12/4 16:29
 * @Version : 1.0
 */
public interface UnifiedFileService {



    /**
     * 文件编辑保存
     *
     * @param stream
     * @param editingDto
     * @param type
     * @return cn.cdeden.resource.domain.vo.SysOssVo
     * @author Yu.
     * @Date 2024/12/13 13:22
     **/
    SysOssVo editSave(InputStream stream, FilesEditingDto editingDto, EditorEnums type);


//    /**
//     * 下载文件到服务中 并解药
//     * @author Yu.
//     * @Date 2024/12/23 15:40
//     * @param ossId 文件的编号
//     * @return java.lang.String
//     **/
//    String zipFile(Long ossId);






    /**
     * 获取文件信息在OSS表中的信息并且放回 文件的预览地址  和预览服务器
     *
     * @param dataInfo 文件信息
     * @param info
     * @return void
     * @author Yu.
     * @Date 2024/12/8 14:48
     **/
    FilePreviewVo getFileDataInfo(RemoteFile dataInfo, OnlinePreviewInfoDto info);

    /**
     * 获取 文件的版本列表
     *
     * @param dataInfo
     * @param info
     * @return cn.cdeden.common.core.utils.page.TableDataInfo
     * @author Yu.
     * @Date 2024/12/8 16:52
     **/
    TableDataInfo<SysOssVersionVo> getFilesVersions(RemoteFile dataInfo, OnlinePreviewInfoDto info, PageQuery pageQuery);


    /**
     * 文件的下载记录
     *
     * @param dataInfo
     * @param info
     * @param pageQuery
     * @return cn.cdeden.common.core.utils.page.TableDataInfo<cn.cdeden.resource.domain.vo.SysOssDownloadRecordVo>
     * @author Yu.
     * @Date 2024/12/9 10:30
     **/
    TableDataInfo<SysOssDownloadRecordVo> getFilesDownloadRecord(RemoteFile dataInfo, OnlinePreviewInfoDto info, PageQuery pageQuery);


    /**
     * 删除OSS对象存储
     *
     * @param id        OSS对象ID串
     * @param versionId 删除的版本
     * @return java.lang.Boolean
     * @author Yu.
     * @Date 2024/12/6 16:18
     **/
    Boolean deleteByIdAndVersionId(Long id, String versionId);



    /**
     * 上传 文件数据到 es 中去
     *
     * @param ossVo     文件信息
     * @param fileBytes 文件的二进制数据
     * @return void
     * @author Yu.
     * @Date 2024/12/11 17:03
     **/
    void esInsertFileInfo(SysOssVo ossVo, byte[] fileBytes);


    /**
     * 把es 中的文件类容更新到对应的版本中去
     *
     * @param ossVo 文件信息
     * @return void
     * @author Yu.
     * @Date 2024/12/11 17:06
     **/
    void esUpdateFileInfo(SysOssVo ossVo);


}
